# -*- coding: utf-8 -*-
# 读取 report.txt 文件中的成绩；
# 统计每名学生总成绩、计算平均并从高到低重新排名；
# 汇总每一科目的平均分和总平均分（见下表第一行）；
# 添加名次，替换60分以下的成绩为“不及格”；
# 将处理后的成绩另存为一个新文件（result.txt）。
# 结果文件内容展示：
# 名次 姓名 语文 数学 英语 物理 化学 生物 政治 历史 地理 总分 平均分
# 0 平均 72 67 76 47 63 73 77 73 82 630 70.0
# 1 小S 94 90 96 89 92 84 83 80 82 790 87.8
# 2 小D 90 88 87 89 82 79 79 83 85 762 84.7
# 3 小A 89 94 90 96 89 92 不及格 73 80 757 84.1
# ...
# 21 小K 82 不及格 83 63 66 67 72 83 86 638 70.9

# 读取文件内容
with open('9-3期中.txt', encoding='utf-8') as f:  #打开文件
    # l = f.readlines()    #读取每行并形成列表
    l = [i.split() for i in f.readlines() if i]     #读取每行内容创建列表并分割开
# print('l======\n', l, len(l))

# 标题添加名次，总分和平均分
lst = l[0]     #标题行
lst.insert(0, '名次')
lst.append('总分')
lst.append('平均分')
# print('lst======\n', lst, len(lst))       # 完成

#统计学生总分
lst1 = []       #用来统计各学生总分
for i in l[1:]:     # 遍历各学生成绩
    a, b = 0, 0       # 用于统计总分数和平均分
    # print('i===\n', i, len(i))
    for j in i[1:]:     # 遍历分数
        j = int(j)
        a, b = a+j, b+1     # 分数和科目数分别相加得总数
    # print(a, b)
    i.append(a)     #总分写入临时列表
    i.append('%.1f' % (a/b))   #平均分写入临时列表
    lst1.append(i)      #写入统计列表
# print('lst1===\n', lst1, len(lst1))       # 总分和平均分完成

# 成绩大到小排序
lst1 = sorted(lst1, key=lambda x: -x[-2])       # 成绩大到小排序
# print('lst1=====\n', lst1, len(lst1))       # 排序完成

# 开始计算各科平均分数
lst2 = ['0', '平均']       #用来统计各科平均分
a = 0       # 各计数案初始值
while a < 11:       # 一共需要统计11科平均数
    a += 1      # 记录次数
    b = 0       # 每轮科目计算完成清零
    for i in lst1:      # 遍历新成绩列表
        # print(f'i====\n{i}', len(i))
        for j in i[a:a+1]:
            # print('j==', j, type(j))
            if a == 11:
                # j = float(j)
                b += float(j)
            else:
                b += int(j)
            # print(f'b==={b}  j==={j}', type(b))
    b //= 30
    # print(f'b=={b}  j=={j}', type(b))
    lst2.append(f'{b}')
# print('lst2===\n', lst2, len(lst2))     # 各科平均数完成

# 替换不及格分数及写入序号
# lst2.append('\n')
lst3 = [lst2]
# print(lst3)
b = 0
for i in lst1:      # 遍历列表
    a = 2
    b += 1
    i.insert(0, f'{b}')     # 加入序号
    # i.append('\n')
    # print('i===', i)      # 完成
    for j in i[2:-1]:
        # print(type(j))
        if float(j) < 60:       # 如果分数小于60
            i[a] = '不及格'        # 替换为不及格
        # print('i==\n', i)
        a += 1
    lst3.append(i)
    # print(i)
    # print(f'lst3===\n{lst3}', len(lst3))
# print(lst3)     # 序号和替换完成

lst3.insert(0, lst)
# print(lst3)
ls = []
for i in lst3:      #重新遍历写入新列表
    for j in i:
        if j == i[-1]:
            ls.append(f'{j}\n')
        else:
            ls.append(f'{j}\t  ')
# print(ls, len(ls))
# 写入文件
with open('result.txt', 'w', encoding='utf-8') as f:
    f.writelines(ls)